package com.adhere.common.utils;

import org.springframework.util.AntPathMatcher;

import java.util.Collection;
import java.util.List;

/**
 * 整合各种工具实现自己的 ObjectUtils
 *
 * @author WT
 * @date 2022/02/08 18:07:29
 */
public class ObjectUtils {

    private ObjectUtils() {
    }

    /**
     * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空，false：非空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }

    /**
     * 判断一个字符串是否为空串
     *
     * @param str String
     * @return true：为空,false：非空
     */
    public static boolean isEmpty(String str) {
        return isNull(str) || "".equals(str.trim());
    }

    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * 判断一个 Collection 是否为空， 包含 List，Set，Queue
     *
     * @param collection 要判断的 Collection
     * @return true：为空,false：非空
     */
    public static boolean isEmpty(Collection<?> collection) {
        return isNull(collection) || collection.isEmpty();
    }

    public static boolean isNotEmpty(Collection<?> collection) {
        return !isEmpty(collection);
    }

    /**
     * 判断 url 是否与 AntPath 规则配置:
     * ? 表示单个字符;
     * * 表示一层路径内的任意字符串，不可跨层级;
     * ** 表示任意层路径;
     *
     * @param pattern 匹配规则
     * @param url     需要匹配的url
     * @return ture 匹配成功，false 匹配失败
     */
    public static boolean urlAntPathMatch(String url, String pattern) {

        AntPathMatcher matcher = new AntPathMatcher();
        return matcher.match(pattern, url);

    }

    /**
     * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
     *
     * @param url      指定字符串
     * @param patterns 需要检查的字符串数组
     * @return 是否匹配
     */
    public static boolean urlAntPathMatches(String url, List<String> patterns) {

        if (isEmpty(url) || isEmpty(patterns)) {
            return false;
        }

        for (String pattern : patterns) {
            if (urlAntPathMatch(url, pattern)) {
                return true;
            }
        }

        return false;
    }

    /**
     * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
     *
     * @param strArray  指定字符串数组
     * @param separator 转化为字符串时用什么分割
     * @return 转化成的字符串
     */
    public static String stringArrayToString(String[] strArray, String separator) {

        StringBuilder stringBuilder = new StringBuilder();

        for (int i=0; i < strArray.length; i++) {
            stringBuilder.append(strArray[i]);
            if (i < strArray.length-1) {
                stringBuilder.append(separator);
            }
        }

        return stringBuilder.toString();

    }

}
